package com.fly.base;

import org.apache.ibatis.exceptions.TooManyResultsException;
import tk.mybatis.mapper.entity.Condition;

import java.util.List;

/**
 * @author frinder
 * @date 2018/6/1
 * @className Service
 * @package com.fly.base
 * @Description: 基础接口，其他Service接口请继承该接口
 */
public interface Service<T> {

    /**
     * 持久化并返回 id
     *
     * @param model
     * @return
     */
    int save(T model);

    /**
     * 批量持久化
     *
     * @param models
     * @return
     */
    int save(List<T> models);

    /**
     * 通过主鍵刪除
     *
     * @param id
     * @return
     */
    int deleteById(Long id);

    /**
     * 批量刪除 eg：ids -> “1,2,3,4”
     *
     * @param ids
     * @return
     */
    int deleteByIds(String ids);

    /**
     * 更新
     *
     * @param model
     * @return
     */
    int update(T model);

    /**
     * 通过ID查找
     *
     * @param id
     * @return
     */
    T findById(Long id);

    /**
     * 通过某个成员属性查找,value需符合unique约束
     *
     * @param property
     * @param value
     * @return
     * @throws TooManyResultsException
     */
    T findBy(String property, Object value) throws TooManyResultsException;

    /**
     * 根据 T 查询
     *
     * @param model
     * @return
     */
    List<T> findByModel(T model);

    /**
     * 通过多个ID查找//eg：ids -> “1,2,3,4”
     *
     * @param ids
     * @return
     */
    List<T> findByIds(String ids);

    /**
     * 根据条件查找
     *
     * @param condition
     * @return
     */
    List<T> findByCondition(Condition condition);

    /**
     * 根据组合条件查询
     *
     * @param wrapper
     * @return
     */
    List<T> findByModelWrapper(ModelWrapper<T> wrapper);

    /**
     * 获取所有
     *
     * @return
     */
    List<T> findAll();

    /**
     * 分页查询
     *
     * @param dataTables
     * @return
     */
    DataTables page(DataTables<T> dataTables);

}
